package com.ruoyi.delivery.service;

import com.ruoyi.delivery.domain.DelOutBoundOrder;
import com.ruoyi.delivery.domain.DelOutBoundDetail;

import java.util.List;

/**
 * 出库订单 服务层
 * @Author: hu
 */
public interface IDelOutBoundOrderService {

    /**
     * 根据条件筛选出库订单（支持分页）
     * @param outId 出库订单ID（支持模糊搜索）
     * @param warehouseId 仓库编号（支持模糊搜索）
     * @param destination 目的地（支持模糊搜索）
     * @param outcomeDateStart 出库日期范围的起始日期
     * @param outcomeDateEnd 出库日期范围的结束日期
     * @param expectedDeliveryTimeStart 预计到达日期范围的起始日期
     * @param expectedDeliveryTimeEnd 预计到达日期范围的结束日期
     * @param state 状态
     * @param evidenceRecordId 订单号（支持模糊搜索）
     * @param page 当前页码（从 1 开始）
     * @param pageSize 每页记录数
     * @return 满足条件的出库订单列表
     */
    List<DelOutBoundOrder> filterOutBoundOrders(
            String outId,
            String warehouseId,
            String destination,
            String outcomeDateStart,
            String outcomeDateEnd,
            String expectedDeliveryTimeStart,
            String expectedDeliveryTimeEnd,
            String state,
            String evidenceRecordId,
            int page,
            int pageSize
    );

    /**
     * 统计出库订单的数量
     * @return 出库订单的总数
     */
    int countOperatorTransportOrders();
    String generateTrackingNumber();

    /**
     * 插入出库订单
     * @param order 出库订单对象
     * @return 是否插入成功
     */
    boolean insertOutBoundOrder(DelOutBoundOrder order);

    /**
     * 删除出库订单
     * @param outId 出库订单ID
     * @return 是否删除成功
     */
    boolean deleteOutBoundOrder(String outId);

    /**
     * 修改出库订单
     * @param order 出库订单对象
     * @return 是否修改成功
     */
    boolean updateOutBoundOrder(DelOutBoundOrder order);

    /**
     * 根据订单号查询仓库编号
     * @param evidenceRecordId 订单号
     * @return 仓库编号
     */
    String getWarehouseIdByEvidenceRecordId(String evidenceRecordId);

    /**
     * 根据出库订单号获取所有出库订单明细
     * @param outId 出库订单ID
     * @return 出库订单明细列表
     */
    List<DelOutBoundDetail> getDetailsByExitRecordId(String outId);

}
